package tag19_05_08.innereklassen;


class Outer {
	
	String att = "Attribut eines Outer-Objektes";
	
	static class StaticInner { //extends Object
		//kein Zugriff auf Attribute oder Methoden der Klasse Outer 
//		public String toString() { return "StaticInner. att von Outer = " + att; }
	}
	
	class Inner { //extends Object
		//Zugriff auf Attribute oder Methoden der Klasse Outer 
		public String toString() { return "Inner. att on Outer = " + att; }
		
		void test() {
			System.out.println( att );
			System.out.println( Outer.this.att );
		}
	} //end of Inner
}

public class IK04_StaticUndNichtstatic {

	public static void main(String[] args) {
		
		Outer.StaticInner si1;
		Outer.Inner i1;
		
		si1 = new Outer.StaticInner(); //ganz normal
		System.out.println(si1);
		
//		i1 = new Outer.Inner(); 		//Compilerfehler
		
		Outer o1 = new Outer();
		i1 = o1 . new Inner(); 
		
		i1 = o1.new Inner(); 
		i1 = new Outer().new Inner();
		
		System.out.println( i1 );
	} //end of main

}
